package com.chinasoft.bigdatadisplay.config;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;

/**
 * Hadoop配置类：创建FileSystem Bean，供工具类注入使用
 */
//
@org.springframework.context.annotation.Configuration
public class HadoopConfig {

    // 从application.yml读取HDFS核心地址（与yml配置完全匹配）
    @Value("${hadoop.core.fs.defaultFS}")
    private String hdfsUri;

    // 从application.yml读取Hadoop静态用户（与yml配置完全匹配）
    @Value("${hadoop.core.hadoop.http.staticuser.user}")
    private String hadoopStaticUser;

    /**
     * 创建FileSystem Bean：Spring会自动执行该方法并管理实例
     */
    @Bean
    public FileSystem fileSystem() throws IOException, URISyntaxException {
        // 1. 初始化Hadoop的配置对象（这里是Hadoop的Configuration，无冲突）
        Configuration hadoopConf = new Configuration(); // 变量名加前缀hadoopConf，更清晰

        // 2. 设置Hadoop用户（解决权限问题，必须与yml中的staticuser一致）
        System.setProperty("HADOOP_USER_NAME", hadoopStaticUser);

        // 3. 创建FileSystem实例（URI需去除多余空格，避免连接失败）
        return FileSystem.get(new URI(hdfsUri.trim()), hadoopConf);
    }
}